home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / parisc / include / asm / bug.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  2.2 KB  |  93 lines

  1. #ifndef _PARISC_BUG_H
  2. #define _PARISC_BUG_H
  3.  
  4. /*
  5.  * Tell the user there is some problem.
  6.  * The offending file and line are encoded in the __bug_table section.
  7.  */
  8.  
  9. #ifdef CONFIG_BUG
  10. #define HAVE_ARCH_BUG
  11. #define HAVE_ARCH_WARN_ON
  12.  
  13. /* the break instruction is used as BUG() marker.  */
  14. #define    PARISC_BUG_BREAK_ASM    "break 0x1f, 0x1fff"
  15. #define    PARISC_BUG_BREAK_INSN    0x03ffe01f  /* PARISC_BUG_BREAK_ASM */
  16.  
  17. #if defined(CONFIG_64BIT)
  18. #define ASM_WORD_INSN        ".dword\t"
  19. #else
  20. #define ASM_WORD_INSN        ".word\t"
  21. #endif
  22.  
  23. #ifdef CONFIG_DEBUG_BUGVERBOSE
  24. #define BUG()                                \
  25.     do {                                \
  26.         asm volatile("\n"                    \
  27.                  "1:\t" PARISC_BUG_BREAK_ASM "\n"        \
  28.                  "\t.pushsection __bug_table,\"a\"\n"    \
  29.                  "2:\t" ASM_WORD_INSN "1b, %c0\n"        \
  30.                  "\t.short %c1, %c2\n"            \
  31.                  "\t.org 2b+%c3\n"                \
  32.                  "\t.popsection"                \
  33.                  : : "i" (__FILE__), "i" (__LINE__),    \
  34.                  "i" (0), "i" (sizeof(struct bug_entry)) ); \
  35.         for(;;) ;                        \
  36.     } while(0)
  37.  
  38. #else
  39. #define BUG()                                \
  40.     do {                                \
  41.         asm volatile(PARISC_BUG_BREAK_ASM : : );        \
  42.         for(;;) ;                        \
  43.     } while(0)
  44. #endif
  45.  
  46. #ifdef CONFIG_DEBUG_BUGVERBOSE
  47. #define __WARN()                            \
  48.     do {                                \
  49.         asm volatile("\n"                    \
  50.                  "1:\t" PARISC_BUG_BREAK_ASM "\n"        \
  51.                  "\t.pushsection __bug_table,\"a\"\n"    \
  52.                  "2:\t" ASM_WORD_INSN "1b, %c0\n"        \
  53.                  "\t.short %c1, %c2\n"            \
  54.                  "\t.org 2b+%c3\n"                \
  55.                  "\t.popsection"                \
  56.                  : : "i" (__FILE__), "i" (__LINE__),    \
  57.                  "i" (BUGFLAG_WARNING),            \
  58.                  "i" (sizeof(struct bug_entry)) );        \
  59.     } while(0)
  60. #else
  61. #define __WARN()                            \
  62.     do {                                \
  63.         asm volatile("\n"                    \
  64.                  "1:\t" PARISC_BUG_BREAK_ASM "\n"        \
  65.                  "\t.pushsection __bug_table,\"a\"\n"    \
  66.                  "2:\t" ASM_WORD_INSN "1b\n"        \
  67.                  "\t.short %c0\n"                \
  68.                  "\t.org 2b+%c1\n"                \
  69.                  "\t.popsection"                \
  70.                  : : "i" (BUGFLAG_WARNING),            \
  71.                  "i" (sizeof(struct bug_entry)) );        \
  72.     } while(0)
  73. #endif
  74.  
  75.  
  76. #define WARN_ON(x) ({                        \
  77.     int __ret_warn_on = !!(x);                \
  78.     if (__builtin_constant_p(__ret_warn_on)) {        \
  79.         if (__ret_warn_on)                \
  80.             __WARN();                \
  81.     } else {                        \
  82.         if (unlikely(__ret_warn_on))            \
  83.             __WARN();                \
  84.     }                            \
  85.     unlikely(__ret_warn_on);                \
  86. })
  87.  
  88. #endif
  89.  
  90. #include <asm-generic/bug.h>
  91. #endif
  92.  
  93.